home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / cps1draw.c < prev    next >
Text File  |  1999-08-03  |  4KB  |  165 lines

  1. /* don't put this file in the makefile, it is #included by cps1.c to */
  2. /* generate 8-bit and 16-bit versions                                */
  3.  
  4. {
  5.     int i, j;
  6.     UINT32 dwval;
  7.     UINT32 *src;
  8.     const unsigned short *paldata;
  9.     UINT32 n;
  10.     DATATYPE *bm;
  11.  
  12.     if ( code > max || (tpens & pusage[code])==0)
  13.     {
  14.         /* Do not draw blank object */
  15.         return;
  16.     }
  17.  
  18.     if (Machine->orientation & ORIENTATION_SWAP_XY)
  19.     {
  20.         int temp;
  21.         temp=sx;
  22.         sx=sy;
  23.         sy=dest->height-temp-size;
  24.         temp=flipx;
  25.         flipx=flipy;
  26.         flipy=!temp;
  27.     }
  28.  
  29.     if (cps1_flip_screen)
  30.     {
  31.         /* Handle flipped screen */
  32.         flipx=!flipx;
  33.         flipy=!flipy;
  34.         sx=dest->width-sx-size;
  35.         sy=dest->height-sy-size;
  36.     }
  37.  
  38.     if (sx<0 || sx > dest->width-size || sy<0 || sy>dest->height-size )
  39.     {
  40.         /* Don't draw clipped tiles (for sprites) */
  41.         return;
  42.     }
  43.  
  44.     paldata=&gfx->colortable[gfx->color_granularity * color];
  45.     src = cps1_gfx+code*delta;
  46.  
  47.     if (Machine->orientation & ORIENTATION_SWAP_XY)
  48.     {
  49.         int bmdelta;
  50.  
  51.         bmdelta = (dest->line[1] - dest->line[0]);
  52.         if (flipy)
  53.         {
  54.             bmdelta = -bmdelta;
  55.             sy += size-1;
  56.         }
  57.         if (flipx) sx+=size-1;
  58.         for (i=0; i<size; i++)
  59.         {
  60.             int ny=sy;
  61.             for (j=0; j<size/8; j++)
  62.             {
  63.                 dwval=*src;
  64.                 n=(dwval>>28)&0x0f;
  65.                 bm = (DATATYPE *)dest->line[ny]+sx;
  66.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  67.                 n=(dwval>>24)&0x0f;
  68.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  69.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  70.                 n=(dwval>>20)&0x0f;
  71.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  72.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  73.                 n=(dwval>>16)&0x0f;
  74.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  75.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  76.                 n=(dwval>>12)&0x0f;
  77.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  78.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  79.                 n=(dwval>>8)&0x0f;
  80.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  81.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  82.                 n=(dwval>>4)&0x0f;
  83.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  84.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  85.                 n=dwval&0x0f;
  86.                 bm = (DATATYPE *)(((unsigned char *)bm) + bmdelta);
  87.                 IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  88.                 if (flipy) ny-=8;
  89.                 else ny+=8;
  90.                 src++;
  91.             }
  92.             if (flipx) sx--;
  93.             else sx++;
  94.             src+=srcdelta;
  95.         }
  96.     }
  97.     else
  98.     {
  99.         if (flipy) sy+=size-1;
  100.         if (flipx)
  101.         {
  102.             sx+=size;
  103.             for (i=0; i<size; i++)
  104.             {
  105.                 if (flipy) bm=(DATATYPE *)dest->line[sy-i]+sx;
  106.                 else bm=(DATATYPE *)dest->line[sy+i]+sx;
  107.                 for (j=0; j<size/8; j++)
  108.                 {
  109.                     dwval=*src;
  110.                     n=(dwval>>28)&0x0f;
  111.                     IF_NOT_TRANSPARENT(n) bm[-1]=paldata[n];
  112.                     n=(dwval>>24)&0x0f;
  113.                     IF_NOT_TRANSPARENT(n) bm[-2]=paldata[n];
  114.                     n=(dwval>>20)&0x0f;
  115.                     IF_NOT_TRANSPARENT(n) bm[-3]=paldata[n];
  116.                     n=(dwval>>16)&0x0f;
  117.                     IF_NOT_TRANSPARENT(n) bm[-4]=paldata[n];
  118.                     n=(dwval>>12)&0x0f;
  119.                     IF_NOT_TRANSPARENT(n) bm[-5]=paldata[n];
  120.                     n=(dwval>>8)&0x0f;
  121.                     IF_NOT_TRANSPARENT(n) bm[-6]=paldata[n];
  122.                     n=(dwval>>4)&0x0f;
  123.                     IF_NOT_TRANSPARENT(n) bm[-7]=paldata[n];
  124.                     n=dwval&0x0f;
  125.                     IF_NOT_TRANSPARENT(n) bm[-8]=paldata[n];
  126.                     bm-=8;
  127.                     src++;
  128.                 }
  129.                 src+=srcdelta;
  130.             }
  131.         }
  132.         else
  133.         {
  134.             for (i=0; i<size; i++)
  135.             {
  136.                 if (flipy) bm=(DATATYPE *)dest->line[sy-i]+sx;
  137.                 else bm=(DATATYPE *)dest->line[sy+i]+sx;
  138.                 for (j=0; j<size/8; j++)
  139.                 {
  140.                     dwval=*src;
  141.                     n=(dwval>>28)&0x0f;
  142.                     IF_NOT_TRANSPARENT(n) bm[0]=paldata[n];
  143.                     n=(dwval>>24)&0x0f;
  144.                     IF_NOT_TRANSPARENT(n) bm[1]=paldata[n];
  145.                     n=(dwval>>20)&0x0f;
  146.                     IF_NOT_TRANSPARENT(n) bm[2]=paldata[n];
  147.                     n=(dwval>>16)&0x0f;
  148.                     IF_NOT_TRANSPARENT(n) bm[3]=paldata[n];
  149.                     n=(dwval>>12)&0x0f;
  150.                     IF_NOT_TRANSPARENT(n) bm[4]=paldata[n];
  151.                     n=(dwval>>8)&0x0f;
  152.                     IF_NOT_TRANSPARENT(n) bm[5]=paldata[n];
  153.                     n=(dwval>>4)&0x0f;
  154.                     IF_NOT_TRANSPARENT(n) bm[6]=paldata[n];
  155.                     n=dwval&0x0f;
  156.                     IF_NOT_TRANSPARENT(n) bm[7]=paldata[n];
  157.                     bm+=8;
  158.                     src++;
  159.                 }
  160.                 src+=srcdelta;
  161.             }
  162.         }
  163.     }
  164. }
  165.